package thread;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘远望
 * Date: 2025-05-25
 * Time: 18:25
 */
//notify方法 object类提供
public class Demo23 {
    public static void main(String[] args) {
        Object locker = new Object();

        /**
         * wait和notify是针对同一对象才能生效的
         * 这个相同的对象 这俩线程沟通的桥梁
         * 如果是两个不同的对象 则没有任何相互影响和作用
         * 但必须确保notify的执行要在wait之后 如果先执行notify则不会有任何副作用
         */
        Thread thread1 = new Thread(() -> {
            try {
                System.out.println("wait 之前");
                synchronized (locker) {
                    locker.wait();
                }
                System.out.println("wait 之后");
            }catch (InterruptedException e) {
                throw new RuntimeException();
            }

        });

        Thread thread2 = new Thread(() -> {
            Scanner scanner = new Scanner(System.in);
            System.out.println("输入任意内容来唤醒thread1");
            scanner.next();

            synchronized (locker) {
                locker.notify();//notify操作原则上说不涉及任何加锁解锁的操作在java中也有强制要求notify搭配synchronized
            }
        });

        thread1.start();
        thread2.start();
    }
}
